package 反射;

//Java通过反射机制获取某个类的全部方法,步骤所用方法如下：
//
//1. forName()   返回给定串名相应的Class对象。
//
//2. getMethods()  返回当前Class对象表示的类或接口的所有公有成员方法对象数组，包括已声明的和从父类继承的方法。
//
//3. getModifiers()   返回该类或接口的Java语言修改器代码。
//
//4. getName()   返回Class对象表示的类型(类、接口、数组或基类型)的完整路径名字符串。

//获取某个类的全部方法
import java.io.Serializable;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class 获取全部方法 implements Serializable {
    private static final long serialVersionUID = -2862585049955236662L;
    public static void main(String[] args) throws Exception {
        //Class<?> clazz = Class.forName("反射.获取全部方法");
        Class<?> clazz = 获取全部方法.class;
        Method method[] = clazz.getMethods();
        for (int i = 0; i < method.length; ++i) {
            Class<?> returnType = method[i].getReturnType();
            Class<?> para[] = method[i].getParameterTypes();
            int temp = method[i].getModifiers();
            System.out.print(Modifier.toString(temp) + " ");
            System.out.print(returnType.getName() + "  ");
            System.out.print(method[i].getName() + " ");
            System.out.print("(");
            for (int j = 0; j < para.length; ++j) {
                System.out.print(para[j].getName() + " " + "arg" + j);
                if (j < para.length - 1) {
                    System.out.print(",");
                }
            }
            Class<?> exce[] = method[i].getExceptionTypes();
            if (exce.length > 0) {
                System.out.print(") throws ");
                for (int k = 0; k < exce.length; ++k) {
                    System.out.print(exce[k].getName() + " ");
                    if (k < exce.length - 1) {
                        System.out.print(",");
                    }
                }
            } else {
                System.out.print(")");
            }
            System.out.println();
        }
    }
}